package com.spring.aop1.service03;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @Author: lxh
 * @name: LogAspect_AOP
 * Date: 2024/6/22  23:04
 */
@Component
@Aspect
public class LogAspect_AOP {

    // 定义通用切点表达式
    // cw.study.spring.service包下的所有insert开头的方法
    @Pointcut("execution(* com.spring.aop1.service03..insert*(..))")
    public void insertPointcut() {}
    // cw.study.spring.service包下的所有update开头的方法
    @Pointcut("execution(*  com.spring.aop1.service03..update*(..))")
    public void updatePointcut() {}
    // cw.study.spring.service包下的所有delete开头的方法
    @Pointcut("execution(*  com.spring.aop1.service03..delete*(..))")
    public void deletePointcut() {}
    // cw.study.spring.service包下的所有modify开头的方法
    @Pointcut("execution(*  com.spring.aop1.service03..modify*(..))")
    public void modifyPointcut() {}

    // 前置通知
    // 切点表达式 insertPointcut() 或者 updatePointcut() 或者 deletePointcut() 或者 modifyPointcut()
    @Before("insertPointcut() || updatePointcut() || deletePointcut() || modifyPointcut()")
    public void beforeAdvice(JoinPoint joinPoint) {
        // 获取系统时间
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        String date = simpleDateFormat.format(new Date());
        // joinPoint 包含了执行方法的相关信息
        // getDeclaringTypeName 获取执行方法的类名
        // getName 获取执行方法的方法名
        System.out.println(date + " 张三 : " + joinPoint.getSignature().getDeclaringTypeName() + "." +
                joinPoint.getSignature().getName());

    }

}
